% !Mode:: "TeX:UTF-8"

\chapter{项目设计}
\section{数据库设计}
    \begin{itemize}
        \item 1.点餐业务流
        
        business（商家表）：
        \begin{figure}[htbp]
          \centering    %居中显示%
            \includegraphics[width=1.0\textwidth]{ch7}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
           % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
          \vspace{\baselineskip}
        \end{figure}
           \newpage

        food（食品表）：
        \begin{figure}[htbp]
          \centering    %居中显示%
            \includegraphics[width=1.0\textwidth]{ch8}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
           % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
          \vspace{\baselineskip}
        \end{figure}
           \newpage
        cart（购物车表）：
        \begin{figure}[htbp]
          \centering    %居中显示%
            \includegraphics[width=1.0\textwidth]{ch9}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
           % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
          \vspace{\baselineskip}
        \end{figure}
           \newpage
        deliveryaddress（送货地址表） ：
        \begin{figure}[htbp]
            \centering    %居中显示%
              \includegraphics[width=1.0\textwidth]{ch10}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
             % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
            \vspace{\baselineskip}
          \end{figure}
            \newpage
        order（订单表）：
        \begin{figure}[htbp]
            \centering    %居中显示%
              \includegraphics[width=1.0\textwidth]{ch11}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
             % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
            \vspace{\baselineskip}
          \end{figure}
            \newpage
        orderlist（订单明细表）：
        \begin{figure}[htbp]
            \centering    %居中显示%
              \includegraphics[width=1.0\textwidth]{ch12}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
             % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
            \vspace{\baselineskip}
          \end{figure}
            \newpage
        user（用户表）：
        \begin{figure}[htbp]
            \centering    %居中显示%
              \includegraphics[width=1.0\textwidth]{ch13}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
             % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
            \vspace{\baselineskip}
          \end{figure}
            %\newpage
        \item  2.积分模块
        
        积分流水表（记录所有的积分流水）：
        \begin{figure}[htbp]
            \centering    %居中显示%
              \includegraphics[width=1.0\textwidth]{ch14}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
             % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
            \vspace{\baselineskip}
          \end{figure}
           \newpage
        可用积分表（记录当前还未过期的积分）：
        \begin{figure}[htbp]
            \centering    %居中显示%
              \includegraphics[width=1.0\textwidth]{ch15}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
             % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
            \vspace{\baselineskip}
          \end{figure}
            %\newpage
        \item  3.虚拟钱包模块
    
        virtualwallet表：存储用户虚拟钱包信息
        \begin{figure}[htbp]
            \centering    %居中显示%
              \includegraphics[width=1.0\textwidth]{ch16}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
             % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
            \vspace{\baselineskip}
          \end{figure}
            %\newpage

        bvirtualwallet表：存储商家虚拟钱包信息
        \begin{figure}[htbp]
            \centering    %居中显示%
              \includegraphics[width=1.0\textwidth]{ch17}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
             % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
            \vspace{\baselineskip}
          \end{figure}
            %\newpage

        virtualwallettransaction表：存储交易流水信息 
        \begin{figure}[htbp]
            \centering    %居中显示%
              \includegraphics[width=1.0\textwidth]{ch18}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
             % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
            \vspace{\baselineskip}
          \end{figure}
            \newpage

        bankcard表：存储银行卡信息
        \begin{figure}[htbp]
            \centering    %居中显示%
              \includegraphics[width=1.0\textwidth]{ch19}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
             % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
            \vspace{\baselineskip}
          \end{figure}
            %\newpage
    \end{itemize}
    \section{接口设计}
点餐业务流：
\begin{itemize}
\item 1.business
\item (1) get+Business/OrderTypeId参数：orderTypeId返回值：business数组功能：根据点餐分类编号查询所属商家信息
\item (2)get+Business/BusinessId
参数：businessId
返回值：business对象
功能：根据商家编号查询商家信息

\item 2.food
\item (1)get方法+Food/BusinessId
参数：businessId
返回值：food数组
功能：根据商家编号查询所属食品信息

\item 3.cart
\item (1)get+Cart/CartList
参数：userId、businessId（可选）
返回值：cart数组（多对一：所属商家信息、所属食品信息）

功能：根据用户编号查询此用户所有购物车信息;根据用户编号和商家编号，
查询此用户购物车中某个商家的所有购物车信息
\item (2)post+Cart/Order
参数：userId、businessId、foodId
返回值：int（影响的行数）

功能：向购物车表中添加一条记录
参数：userId、businessId、foodId、quantity
返回值：int（影响的行数）

功能：根据用户编号、商家编号、食品编号更新数
\item (3)put+Cart/Order
参数：userId、businessId、foodId、quantity
返回值：int（影响的行数）

功能：根据用户编号、商家编号、食品编号更新数量
\item (4)delete+Cart/Order
参数：userId、businessId、foodId（可选）
返回值：int（影响的行数）

功能：根据用户编号、商家编号、食品编号删除购物车表中的一条食品记
录;根据用户编号、商家编号删除购物车表中的多条条记录

\item 4.deliveryAddress
\item (1)get+DeliveryAddress/UserId
参数：userId
返回值：deliveryAddress数组

功能：根据用户编号查询所属送货地址
\item (2)get+DeliveryAddress/DaId
参数：daId
返回值：deliveryAddress对象

功能：根据送货地址编号查询送货地址
\item (3)post+DeliveryAddress/DaId
参数：contactName、contactSex、contactTel、address、userId
返回值：int（影响的行数）

功能：向送货地址表中添加一条记录
\item (4)put+DeliveryAddress/DaId
参数：daId、contactName、contactSex、contactTel、address、userId
返回值：int（影响的行数）

功能：根据送货地址编号更新送货地址信息
\item (5)delete+DeliveryAddress/DaId
参数：daId
返回值：int（影响的行数）

功能：根据送货地址编号删除一条记录

\item 5.orders
\item (1)post+Orders/OrdersId
参数：userId、businessId、daId、orderTotal
返回值：int（订单编号）

功能：根据用户编号、商家编号、订单总金额、送货地址编号向订单表中
添加一条记录，并获取自动生成的订单编号，然后根据用户编号、商家编号 从购物车表中查询所有数据，批量添加到订单明细表中，然后根据用户编号、 商家编号删除购物车表中的数据。
\item (2)get+Orders/OrdersId
参数： orderId
返回值：orders对象（包括多对一：商家信息；一对多：订单明细信息）

功能：根据订单编号查询订单信息，包括所属商家信息，和此订单的所有
订单明细信息
\item (3)get+Orders/userId
参数：userId
返回值：orders数组（包括多对一：商家信息；一对多：订单明细信息）

功能：根据用户编号查询此用户的所有订单信息

\item 6.user
\item (1)get+User/Login
参数：userId、password
返回值：user对象

功能：根据用户编号与密码查询用户信息
\item (2)get+User/UserId
参数：userId
返回值：int（返回行数）

功能：根据用户编号查询用户表返回的行数
\item (3)post+User/UserId
参数：userId、password、userName、userSex
返回值：int（影响的行数）

功能：向用户表中添加一条记录
积分模块：
\item (1) get方法+Credit/totalNum
参数：userId
返回值：int

功能：获得当前用户的全部可用积分数目
\item (2) get方法+Credit/availableCredit
参数：userId
返回值：credit 数组

功能：获得当前用户的全部可用积分明细
\item (3) get方法+Credit/userId
参数：userId
返回值：credit 数组

功能：获得当前用户的全部积分流水明细
\item (4) get方法+Credit/channelType
参数：userId、channelType
返回值：credit 数组

功能：获得当前用户指定类型的全部积分流水明细
\item (5) post方法+Credit/userId
参数：userId、channelType、num
返回值：int

功能：向积分流水表中添加一条记录（注意要判断，不能使消费积分大于当前积分）
虚拟钱包模块：
\item (1) get方法 + VirtualWallet/UserId
参数：userId
返回值：VirtualWallet对象

功能：根据用户Id查询虚拟钱包
\item (2) get方法 + VirtualWallet/WalletId
参数：walletId
返回值：balance（账户余额）

功能：根据虚拟钱包Id查询余额
\item (3) post方法 + VirtualWallet/FromWalletId
参数：walletId，amount
返回值：int（0代表失败，1代表成功）

功能：虚拟钱包提现
\item (4) post方法 + VirtualWallet/ToWalletId
参数：walletId，amount
返回值：int（0代表失败，1代表成功）

功能：虚拟钱包充值
\item (5) post + VirtualWallet/WalletId
参数：fromWalletId，toWalletId，amount，orderId
返回值：int（0代表失败，1代表成功）

功能：虚拟钱包支付
\item (6) get+ VirtualWalletTransaction/WalletId
参数：walletId
返回值：VirtualWalletTransaction数组

功能：根据虚拟钱包编号查询相应的交易记录
\item (7) post+BankCard/CardId
参数：cardId, userName, bankName, walletId
返回值：int（影响的行数）

功能：添加银行卡
\item (8) get+BankCard/WalletId
参数：walletId
返回值：BankCard数组

功能：根据虚拟钱包Id查询银行卡
\item (9) get + BVirtualWallet/BusinessId
参数：businessId
返回值：BVirtualWallet对象

功能：根据商家Id查询商家虚拟钱包
\end{itemize}

\section{软件架构设计}
\begin{itemize}

  \item 1.Spring cloud微服务集群整体架构

  \begin{figure}[htbp]
    \centering    %居中显示%
      \includegraphics[width=1.0\textwidth]{ch20}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
     % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
    \vspace{\baselineskip}
  \end{figure}
    %\newpage
     
 \item 2创建每个微服务时，项目采用基于Servlet的简易MVC架构，采用约定优于配置的原则来搭建简易MVC框架，如下图所示：
        

 \begin{figure}[htbp]
    \centering    %居中显示%
      \includegraphics[width=0.6\textwidth]{ch21}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
     % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
    \vspace{\baselineskip}
  \end{figure}
    %\newpage

 \item  3.分层设计（以积分系统模块和钱包系统模块为例）
    
    积分系统模块：
    \begin{figure}[htbp]
        \centering    %居中显示%
          \includegraphics[width=0.8\textwidth]{ch22}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
         % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
        \vspace{\baselineskip}
      \end{figure}
        %\newpage

    虚拟钱包模块：
    \begin{itemize}
       \item Mapper层
       \begin{figure}[htbp]
        \centering    %居中显示%
          \includegraphics[width=0.8\textwidth]{ch23}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
         % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
        \vspace{\baselineskip}
      \end{figure}
        %\newpage
       \item Service层
         \begin{figure}[htbp]
          \centering    %居中显示%
             \includegraphics[width=0.8\textwidth]{ch24}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
            % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
          \vspace{\baselineskip}
    \end{figure}    
    \newpage
    \item Controller层
    \begin{figure}[htbp]
        \centering    %居中显示%
           \includegraphics[width=0.8\textwidth]{ch25}%从figures目录下读取图片，正文中的图片的文件格式可以是.pdf,.jpg,.png,.eps等%
          % \caption{树状结构}\label{fig:xml}%图的标题和交叉引用标签，其中\lable是为图片编号所用%
        \vspace{\baselineskip}
    \end{figure}
  \end{itemize}
\end{itemize}